ORM (Object-Relational Mapping) এর ধারণা গাইড ও নোট

Java Technologies - হাইবারনেট (Hibernate) - Hibernate এর পরিচিতি
402

ORM (Object-Relational Mapping) হল একটি প্রযুক্তি যা অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) ধারণাগুলিকে রিলেশনাল ডাটাবেসের সাথে সংযুক্ত করার জন্য ব্যবহৃত হয়। ORM-এর মাধ্যমে, আপনি অবজেক্ট এবং ডাটাবেসের টেবিলের মধ্যে সম্পর্ক তৈরি করতে পারেন, যাতে অবজেক্টের ডাটা রিলেশনাল ডাটাবেসে সঞ্চিত হতে পারে এবং রিলেশনাল ডাটাবেস থেকে অবজেক্টগুলিতে রূপান্তরিত হতে পারে। এটি ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য SQL কোড লেখার প্রয়োজন কমিয়ে আনে, এবং জাভা অবজেক্টগুলির সাথে কাজ করার মাধ্যমে ডেটাবেসের মধ্যে ডাটা ম্যানিপুলেশন সহজতর করে।

Hibernate ORM এর মূল উদ্দেশ্য

Hibernate হল একটি জনপ্রিয় ORM ফ্রেমওয়ার্ক যা Java প্রোগ্রামিং ভাষায় ব্যবহৃত হয়। Hibernate ডেটাবেসের টেবিলগুলির সাথে জাভা ক্লাসগুলির অবজেক্টগুলির ম্যাপিং সহজ করে তোলে। Hibernate সিস্টেম ডেভেলপারদের ডেটাবেসের সাথে সংযোগ স্থাপন এবং এর মধ্যে ডাটা ম্যানিপুলেশন (CRUD অপারেশন) করার জন্য JDBC এবং SQL এর পরিবর্তে সহজ API প্রদান করে।

ORM এর কাজের প্রক্রিয়া

ORM প্রক্রিয়া আসলে জাভা অবজেক্টের সাথে ডাটাবেসের টেবিলগুলির সম্পর্ক তৈরি এবং সেগুলির মধ্যে ডাটা ট্রান্সফার করা। ORM টুলস (যেমন Hibernate) ডেটাবেসের টেবিলগুলির সাথে অবজেক্ট ম্যাপিং তৈরি করার জন্য কিছু কনভেনশন এবং কনফিগারেশন অনুসরণ করে। এটি ডেটাবেসের সার্ভার থেকে অবজেক্ট তৈরি এবং আপডেট করতে SQL কোড বা জেপিএল (JPQL) ব্যবহার করে।

ORM এর সুবিধা

  1. SQL কোড কমানো:
    • ORM ব্যবহার করলে আপনাকে SQL কোড কম লিখতে হয়, কারণ ORM নিজেই অনেক SQL কোড জেনারেট করে থাকে।
  2. ডেটাবেস নিরপেক্ষতা:
    • ORM ফ্রেমওয়ার্কগুলির মাধ্যমে আপনি ডেটাবেসের নির্দিষ্ট কোডিংয়ের পরিবর্তে একাধিক ডেটাবেস সিস্টেমের মধ্যে পরিবর্তন করতে পারেন।
  3. অবজেক্ট-মডেল এবং ডাটাবেস মডেলের মধ্যে সম্পর্ক:
    • ORM ক্লাসগুলির মধ্যে সম্পর্কের জন্য সহজভাবে ম্যানেজ করা সম্ভব হয়। যেমন, টেবিলের মধ্যে একটি foreign key সম্পর্ককে ক্লাসের মধ্যে একটি অ্যাসোসিয়েশন হিসেবে প্রকাশ করা যায়।
  4. ট্রানজেকশন ম্যানেজমেন্ট:
    • ORM সাধারণত ডেটাবেসের সাথে একাধিক অপারেশনের ক্ষেত্রে ট্রানজেকশন ম্যানেজমেন্ট সরবরাহ করে।
  5. বিজ্ঞানভিত্তিক ডেটা অ্যাক্সেস:
    • ORM ফ্রেমওয়ার্ক যেমন Hibernate, ডেটাবেসের মধ্যে object-oriented তত্ত্ব ব্যবহার করে ডেটা ম্যানিপুলেট করতে সক্ষম হয়।

Hibernate ORM এর প্রধান বৈশিষ্ট্য

  1. Automated Mapping:
    • Hibernate ডেটাবেসের টেবিল এবং জাভা অবজেক্টের মধ্যে ম্যাপিং স্বয়ংক্রিয়ভাবে করে দেয়। এজন্য @Entity, @Table, @Id, @Column এবং অন্যান্য অ্যানোটেশন ব্যবহার করা হয়।
  2. Data Querying:
    • Hibernate HQL (Hibernate Query Language) এবং Criteria API ব্যবহার করে ডেটাবেস থেকে ডাটা অনুসন্ধান করতে সক্ষম।
  3. Lazy Loading:
    • Hibernate lazy loading সমর্থন করে, অর্থাৎ অবজেক্টের সম্পর্কযুক্ত ডাটা তখনই লোড করা হবে যখন তা প্রয়োজন হবে।
  4. Caching:
    • Hibernate ক্যাশিং সমর্থন করে, যার মাধ্যমে বারবার ডেটাবেস থেকে ডাটা রিট্রিভ করার পরিবর্তে ক্যাশে থাকা ডাটা ব্যবহার করা হয়, যা পারফরম্যান্স বাড়ায়।
  5. Transaction Management:
    • Hibernate ট্রানজেকশন পরিচালনা করতে সাহায্য করে, ডেটাবেসের বিভিন্ন অপারেশনকে একত্রিত করে একটি একক ট্রানজেকশন তৈরি করা সম্ভব হয়।

Hibernate ORM এর মাধ্যমে Object-Relational Mapping এর উদাহরণ

Step 1: Java Entity Class তৈরি করা

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "users")  // Database Table Name
public class User {

    @Id  // Primary Key
    private int id;
    private String name;
    private String email;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

এখানে, User ক্লাসটি একটি Java Entity যা users নামের ডাটাবেস টেবিলের সাথে ম্যাপ করা হয়েছে। @Id অ্যানোটেশন প্রাইমারি কি নির্দেশ করে এবং @Table ডাটাবেস টেবিলের নাম নির্ধারণ করে।

Step 2: Hibernate Configuration

Hibernate কনফিগারেশন করার জন্য hibernate.cfg.xml ফাইলটি তৈরি করতে হয়, যেখানে ডাটাবেসের কনফিগারেশন সেট করা হয়।

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- JDBC Database connection settings -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/yourdb</property>
        <property name="hibernate.connection.username">yourusername</property>
        <property name="hibernate.connection.password">yourpassword</property>

        <!-- JDBC connection pool settings -->
        <property name="hibernate.c3p0.min_size">5</property>
        <property name="hibernate.c3p0.max_size">20</property>

        <!-- Specify dialect -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Echo all executed queries -->
        <property name="hibernate.show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!-- Disable the second-level cache -->
        <property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed queries -->
        <property name="hibernate.format_sql">true</property>
    </session-factory>
</hibernate-configuration>

Step 3: Hibernate SessionFactory তৈরি করা

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    private static SessionFactory factory;

    static {
        try {
            factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(User.class).buildSessionFactory();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SessionFactory getFactory() {
        return factory;
    }
}

Step 4: Hibernate ব্যবহার করে ডাটা সেভ করা

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

public class Main {
    public static void main(String[] args) {
        // Get SessionFactory
        SessionFactory factory = HibernateUtil.getFactory();
        Session session = factory.getCurrentSession();

        try {
            // Create a new User object
            User newUser = new User();
            newUser.setName("John Doe");
            newUser.setEmail("john.doe@example.com");

            // Start a transaction
            session.beginTransaction();

            // Save the user object
            session.save(newUser);

            // Commit the transaction
            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

ORM এর মূল সুবিধা

  1. Database Independence: ORM ডেটাবেসকে অ্যাবস্ট্র্যাক্ট করে, অর্থাৎ আপনি বিভিন্ন ডেটাবেস ব্যবহার করতে পারেন কোড পরিবর্তন না করেই।
  2. Productivity: SQL কোড লেখার প্রয়োজন কমে যায়, কারণ ORM আপনাকে ম্যানুয়ালি SQL কোড লিখতে দেয় না।
  3. Improved Code Quality: ORM ফ্রেমওয়ার্ক যেমন Hibernate আপনাকে ন্যাচারাল অবজেক্ট-ওরিয়েন্টেড স্টাইলের কোড লেখার সুযোগ দেয়, যা কোডের পার্সিবিলিটি এবং মেন্টেনেবিলিটি উন্নত করে।

Hibernate ORM ব্যবহার করে Java অ্যাপ্লিকেশনগুলি ডেটাবেসের সাথে যোগাযোগ করতে খুবই কার্যকরী এবং সহজ। ORM সিস্টেমটি ডেটাবেস এবং অবজেক্ট মডেলগুলির মধ্যে সেতুবন্ধন তৈরি করে, যা ডেভেলপারদের জন্য ডেটাবেস ম্যানিপুলেশন আরও সহজ, পরিষ্কার, এবং টেস্টযোগ্য করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...